用MATLAB进行STK11编程

您所在的位置:网站首页 matlab与stk互联 代码 用MATLAB进行STK11编程

用MATLAB进行STK11编程

2024-01-14 11:02| 来源: 网络整理| 查看: 265

文章目录 前言一、MATALB的初始运行二、STK的编程文档1.使用的总体感受2.获取可见性的开始结束时间3.获取卫星的姿态四元素4.获取目标点的笛卡尔坐标5.获取卫星的笛卡尔位置和速度6.使用PreData提取数据7.获取单个时间点的数据8.获取特定点和元素的数据9.获取分为多个部分的时间相关数据 总结

前言

提示:这里可以添加本文要记录的大概内容:

按照CSDN上的帖子成功安装了STK11,并成功与MATLAB的版本号相对应。我用的是STK11与MATLAB2018b。 安装的过程很简单,按照下面的链接就可以了,使用stkInit命令进行测试的时候,出现错误的原因是STK没有打开。打开STK就不会报Error了。 接下来,就总结一下,最近这几天的STK帮助文档的使用,主要是方便自己以后查找。 这里贴上各位博主大佬的链接 STK 与Matlab 的连接 STK 11.6 安装、与MATLAB的互联及其混合编程 [ STK ](二)STK 与 Matlab 互联(亲测成功 【STK】STK11.6下载安装+MATLAB互连+各插件模块(不用再找了,这里能解决)

一、MATALB的初始运行

刚开始的时候,找个安装目录下的一个.m实例,简单地运行了一下,链接这里,有时间再补吧。

二、STK的编程文档 1.使用的总体感受

1.其实,感觉还是STK10的帮助文档更方便直观,STK11的网页文档看着有点绕,还得一个一个得找。STK的帮助文档就在开始菜单STK11文件夹内,里面的Programming Interface Hel。 STK帮助文档 2.其次,就是感觉还是利用C#进行STK编程更好一点,因为matlab的变量类型是真的不清楚。所以说,用MATLAB进行STK编程得清楚变量的类型,进而去找里面的属性和方法。

代码如下(示例):

import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings('ignore') import ssl ssl._create_default_https_context = ssl._create_unverified_context 2.获取可见性的开始结束时间

代码如下(示例):

%将时间单位设置为历元秒,这样我们的时间步长输入以及开始和停止时间都以秒为单位。 root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec'); scenario = root.CurrentScenario; access = satellite.GetAccessToObject(facility); access.ComputeAccess; %获取Access(访问)数据 accessDP = access.DataProviders.Item('Access Data').Exec(scenario.StartTime, scenario.StopTime); %DP中获取Cell数据,转为mat accessStartTimes = cell2mat(accessDP.DataSets.GetDataSetByName('Start Time').GetValues); accessStopTimes = cell2mat(accessDP.DataSets.GetDataSetByName('Stop Time').GetValues);

STK应用的报告: STK图片

3.获取卫星的姿态四元素 root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec'); elems = {'Time';'q1';'q2';'q3';'q4'}; satDP = satellite.DataProviders.Item('Attitude Quaternions').ExecElements(scenario.StartTime, scenario.StopTime, 60, elems); % 无论何时将索引传递给数组,都需要将其转换为(int32) satTime = cell2mat(satDP.DataSets.Item(cast(0,'int32')).GetValues); satq1 = cell2mat(satDP.DataSets.Item(cast(1,'int32')).GetValues); satq2 = cell2mat(satDP.DataSets.Item(cast(2,'int32')).GetValues); satq3 = cell2mat(satDP.DataSets.Item(cast(3,'int32')).GetValues); satq4 = cell2mat(satDP.DataSets.Item(cast(4,'int32')).GetValues); 4.获取目标点的笛卡尔坐标 root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec'); facDP = facility.DataProviders.Item('Cartesian Position').Exec; facx = cell2mat(facDP.DataSets.GetDataSetByName('x').GetValues); facy = cell2mat(facDP.DataSets.GetDataSetByName('y').GetValues); facz = cell2mat(facDP.DataSets.GetDataSetByName('z').GetValues); 5.获取卫星的笛卡尔位置和速度 root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec'); satPosDP = satellite.DataProviders.Item('Cartesian Position').Group.Item('ICRF').Exec(scenario.StartTime,scenario.StopTime,60); satx = cell2mat(satPosDP.DataSets.GetDataSetByName('x').GetValues); saty = cell2mat(satPosDP.DataSets.GetDataSetByName('y').GetValues); satz = cell2mat(satPosDP.DataSets.GetDataSetByName('z').GetValues); satVelDP = satellite.DataProviders.GetDataPrvTimeVarFromPath('Cartesian Velocity/ICRF').Exec(scenario.StartTime,scenario.StopTime,60); satvx = cell2mat(satVelDP.DataSets.GetDataSetByName('x').GetValues); satvy = cell2mat(satVelDP.DataSets.GetDataSetByName('y').GetValues); satvz = cell2mat(satVelDP.DataSets.GetDataSetByName('z').GetValues); 6.使用PreData提取数据 root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec'); facChooseDP = facility.DataProviders.Item('Points Choose System'); dataProvCenter = facChooseDP.Group.Item('Center'); dataProvCenter.PreData = 'CentralBody/Earth TOD'; rptElems = {'Time';'x';'y';'z'}; results = dataProvCenter.ExecElements(scenario.StartTime, scenario.StopTime, 60, rptElems); datasets = results.DataSets; Time = cell2mat(datasets.GetDataSetByName('Time').GetValues); facTODx = cell2mat(datasets.GetDataSetByName('x').GetValues); facTODy = cell2mat(datasets.GetDataSetByName('y').GetValues); facTODz = cell2mat(datasets.GetDataSetByName('z').GetValues); 7.获取单个时间点的数据 root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec'); satPassDP = satellite.DataProviders.Item('Precision Passes').ExecSingle(2600); pass = cell2mat(satPassDP.DataSets.GetDataSetByName('Precision Pass Number').GetValues); 8.获取特定点和元素的数据 root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec'); times = {0;15000;20000;55000}; elems = {'Time';'Precision Pass Number'}; satPassesDP = satellite.DataProviders.Item('Precision Passes').ExecSingleElementsArray(times,elems); passes = cell2mat(satPassesDP.GetArray(cast(1,'int32'))); 9.获取分为多个部分的时间相关数据 root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec'); accessAER = access.DataProviders.Item('AER Data').Group.Item('BodyFixed').Exec(scenario.StartTime, scenario.StopTime,60); AERTimes = cell2mat(accessAER.Interval.Item(cast(0,'int32')).DataSets.GetDataSetByName('Time').GetValues); Az = cell2mat(accessAER.Interval.Item(cast(0,'int32')).DataSets.GetDataSetByName('Azimuth').GetValues); El = cell2mat(accessAER.Interval.Item(cast(0,'int32')).DataSets.GetDataSetByName('Elevation').GetValues); for i = 1:1:accessAER.Interval.Count-1 AERTimes = [AERTimes; cell2mat(accessAER.Interval.Item(cast(i,'int32')).DataSets.GetDataSetByName('Time').GetValues)]; Az = [Az; cell2mat(accessAER.Interval.Item(cast(i,'int32')).DataSets.GetDataSetByName('Azimuth').GetValues)]; El = [El; cell2mat(accessAER.Interval.Item(cast(i,'int32')).DataSets.GetDataSetByName('Elevation').GetValues)]; end 总结

其实,我也不是很懂上面的程序,只是简单地从STK帮助文档中copy出来,希望以后再回头看的时候,能更加深入理解吧。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3